home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 7 / Amiga Format AFCD07 (Dec 1996, Issue 91).iso / serious / shareware / programming / aros / scripts / makefunctable.awk < prev   
Text File  |  1996-09-12  |  2KB  |  98 lines

  1. BEGIN {
  2.     maxlvo = 0;
  3.  
  4.     oname=tolower(lib) "_functable.c";
  5.  
  6.     print "/*" > oname;
  7.     print "        (C) 1995-96 AROS - The Amiga Replacement OS" >> oname
  8.     print "        *** Automatic generated file. Do not edit ***" >> oname
  9.     print "        Desc: Funktion table for " lib >> oname
  10.     print "        Lang: english" >> oname
  11.     print "*/" >> oname;
  12.     print "#ifndef AROS_LIBCALL_H\n#   include <aros/libcall.h>\n#endif" >> oname;
  13.     print "#ifndef NULL\n#define NULL ((void *)0)\n#endif\n" >> oname;
  14.  
  15.     f[1] = "open";
  16.     f[2] = "close";
  17.     f[3] = "expunge";
  18.     f[4] = "null";
  19.  
  20.     if (maxlvo < 4)
  21.     maxlvo = 4;
  22. }
  23. /^[ \t]*NAME[ \t]*(\*\/)?[ \t]*$/ {
  24.     while (getline > 0)
  25.     {
  26.         if (match($0,/^[ \t]*__AROS_LH/))
  27.         {
  28.         line=$0;
  29.         sub(/[ \t]*$/,"",line);
  30.         match(line,/[a-zA-Z0-9_]+,$/);
  31.         name=substr(line,RSTART,RLENGTH-1);
  32.         break;
  33.         }
  34.     }
  35.     }
  36. /^(\/\*)?[ \t]*LOCATION[ \t]*(\*\/)?[ \t]*$/ {
  37.     while (getline > 0)
  38.     {
  39.     if (match ($0, /[0-9]+,/))
  40.     {
  41.         lvo=int(substr($0,RSTART,RLENGTH-1));
  42.  
  43.         f[lvo] = name;
  44.         if (lvo > maxlvo)
  45.         maxlvo = lvo;
  46.  
  47.         break;
  48.     }
  49.  
  50.     if (match ($0, /(\*\/|\*\/)/))
  51.         break;
  52.     }
  53. }
  54. /^\/\*AROS/ {
  55.     if ($2 == "alias") {
  56.     a[lvo] = $3;
  57.     f[lvo] = $4;
  58.     }
  59. }
  60. END {
  61.     for (t=1; t<=maxlvo; t++)
  62.     {
  63.     if (t in f && !(t in a))
  64.         print "void __AROS_SLIB_ENTRY(" f[t] "," lib ") (void);" >> oname;
  65.     }
  66.  
  67.     print "\nvoid *const " lib "_functable[]=\n{" >> oname;
  68.  
  69.     show=0;
  70.  
  71.     for (t=1; t<=maxlvo; t++)
  72.     {
  73.     line="    ";
  74.  
  75.     if (t in f)
  76.     {
  77.         line=line "__AROS_SLIB_ENTRY(" f[t] "," lib "),";
  78.  
  79.         if (t in a)
  80.         line=line " /* " a[t] " " t " */";
  81.         else
  82.         line=line " /* " t " */";
  83.     }
  84.     else
  85.         line=line "NULL, /* " t " */";
  86.  
  87.     print line >> oname;
  88.  
  89.     show=0;
  90.     }
  91.  
  92.     print "    (void *)-1L" >> oname;
  93.     print "};" >> oname;
  94.  
  95.     print "\nchar " lib "_end;" >> oname;
  96. }
  97.  
  98.